// 原型链：多个对象之间通过 `__proto__` 链接起来的这种关系就是原型链。

// 浅拷贝：只拷贝对象的第一层，如果对象内容还有对象的话，其实拷贝是一个引用地址，对此对象（对象中的对象）的修改会相互影响。

// 深拷贝：递归浅拷贝的过程。

const obj = {
  age: 18,
  info: {
    name: 'xxx',
  },
}

// 浅拷贝会相互影响，【改对象中的复杂数据类型中的内容会相互影响】
const newObj = {}
for (let attr in obj) {
  newObj[attr] = obj[attr]
}
// 这叫改内容
// newObj.info.name = 'yyy'
// 这叫改引用地址，不会影响原来的
newObj.info = { name: 'yyy' }
console.log(obj.info.name) // 'xxx'

// 深拷贝，【都不会相互影响】
/* const newObj = JSON.parse(JSON.stringify(obj))
newObj.info.name = 'yyy'
console.log(obj.info.name) // 'xxx' */

// 两个完全是一个东西，【改啥都会相互影响】
/* const newObj = obj
newObj.age = 19
console.log(obj.age) */

/* const fn1 = () => {}
function fn2() {}

fn1.aaa = function () {}
fn2.bbb = function () {} */

function p(i) {
  return new Promise((resolve) => {
    setTimeout(function () {
      resolve(i)
    }, 2000)
  })
}

/* async function fn() {
  for (let i = 0; i < 100; i++) {
    const r = await p(i)
    console.log(r)
  }
}
fn() */

const arr = []
for (let i = 0; i < 100; i++) {
  arr.push(p(i))
}
// 并发多个请求
// 并且 r 里面的返回结果和 arr 里面的 Promise 的书写顺序是一致的
Promise.all(arr).then((r) => {
  console.log(r)
})
